//IOCL for mounting volume

#define IOCTL_VCRYD_MOUNT_VOLUME CTL_CODE( FILE_DEVICE_DISK, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS)
//IOCL for dismountig volume
#define IOCTL_VCRYD_DISMOUNT_VOLUME CTL_CODE( FILE_DEVICE_DISK, 0x802, METHOD_BUFFERED, FILE_ANY_ACCESS)
//IOCL reserved in case of growing project
#define IOCTL_VCRYD_RESERVE_VOLUME CTL_CODE(FILE_DEVICE_DISK, 0x805, METHOD_BUFFERED, FILE_ANY_ACCESS)

typedef struct _DEVICE_EXTENSION {
	BOOLEAN                     media_in_device;
	HANDLE                      file_handle;
	//ANSI_STRING                 file_name;
	LARGE_INTEGER               file_size;
	BOOLEAN                     read_only;
	BOOLEAN                     is_cd_or_dvd;
	CHAR						key[24];
	LIST_ENTRY                  list_head;
	KSPIN_LOCK                  list_lock;
	//KEVENT                      request_event;
	PVOID                       thread_pointer;
	BOOLEAN                     terminate_thread;
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;


//should be sent with IOCL mount IRP
typedef struct _OPEN_FILE_INFORMATION {
	LARGE_INTEGER   FileSize;
	BOOLEAN         ReadOnly;
	UCHAR           DriveLetter;
	USHORT          FileNameLength;
	CHAR           FileName[1];      //? should be a pointer
		//Unicode string maybe
} OPEN_FILE_INFORMATION, *POPEN_FILE_INFORMATION;

#define HEADER_OFFSET 0




